MongoDB副本集、分片集的伪分布式部署(保姆级教程)(一)

您所在的位置:网站首页 mongodb 分布式集群 MongoDB副本集、分片集的伪分布式部署(保姆级教程)(一)

MongoDB副本集、分片集的伪分布式部署(保姆级教程)(一)

2023-08-23 18:01| 来源: 网络整理| 查看: 265

1 集群架构(概念篇)

       MongoDB有三种集群部署模式,分别是主从复制(Master-Slave)、副本集(ReplicaSet)、分片集(Sharding)。采用集群架构复制的目的:保证数据生产部署时的冗余和可靠性,采用不同的机器来保存副本,数据不会因为单点故障而丢失。读写分离,提高数据的读取能力。故障转移、故障恢复。

1.1 MongoDB核心组件

💥Mongod: 处理所有的数据请求、管理数据的增删改查操作。默认的数据目录/data/db,默认端口27017,默认主机地址localhost。

💥Mongo:MongoDB提供的一个Mongo shell客户端,便于用户与MongoDB之间的交互。启动Mongo默认连接到localhost:270127的test数据库。

💥Mongos: 用于MongoDB分片集的路由选择,对来自于应用层的查询请求进行处理,平判断所请求的数据位于分片集的哪个位置。

1.2 主从复制

       1️⃣主从复制模式的集群只能有一个主节点,主节点提供所有的增删改查服务,从节点不提供服务,但是可以通过设置从节点提供查询服务,这样可以减少主节点的压力。2️⃣此外,每个从节点都要知道主节点的地址以及主节点的各个操作,从节点定期轮询主节点获取操作,并对自己的数据副本进行这些操作,从而保证主从节点数据的一致性。3️⃣主节点出现故障,只能人工介入指定新的主节点,在此期间整个集群数据只能被读而无法修改。

1.3 副本集

image.png

Primary主节点:与主从复制一样,副本集中也只能有一个主节点,向外对客户端提供数据读写的服务,执行的写操作信息保存在oplog中。不同的是,副本集中的主节点发生故障时,仲裁节点触发选举,在所有的从节点中选出一个作为新的主节点,即使后续旧的主节点恢复正常,也会以从节点的身份加入到集群。

Secondary从节点:从节点只提供读数据的服务,并且从节点定期轮询oplog日志文件,根据日志内容同步更新自身的数据,使之保持与主节点一致。

Arbiter仲裁节点:仲裁节点不存储任何数据,只记录集群的节点数以及主节点发生故障时触发选举机制进行仲裁。仲裁节点和其他节点之间的唯一通信就是选举期间的投票、心跳信息。

1.4 分片集

       副本集可以解决主节点发生故障所导致的数据丢失或不可用的问题,但遇到需要存储海量数据的情况,副本集就无法解决了。此时就用到了MongoDB的分片集操作,所谓分片就是将数据拆分并分散存储在不同机器上的过程。

       什么时间进行分片操作:1.单个节点的磁盘空间不足时。2.单个mongod已经不能满足写数据的性能要求,通过分片让写压力分散到各个分片服务器上。3.把大量数据放到内存里提高性能,通过分片利用多台分片服务器的内存资源。

image.png

Shard Server分片服务器:每一个分片服务器都是一个mongod进程,用于存储实际的数据块。实际生产中,一个分片服务器往往有多台机器组成一个副本集来共同承担,防止因主节点的单点故障而崩溃整个系统。

Config Server配置服务器:同样是一个mongod进程,用来保存集群和分片的元数据,在集群启动的最开始时建立。

Route Server路由服务器:是一个独立的mongos进程(即不储存数据的mongod进程),启动时要从配置服务器加载集群信息到缓存中(分片集群要首先启动配置服务器的原因),并将客户端的请求路由给每个分片服务器,在各分片服务器返回结果后进行聚合并返回客户端。

2 集群搭建2.1 部署副本集(伪分布式)

建议开三个终端界面,分别操作三个节点,这样操作比较直观。

1️⃣首先需要有三个节点或者说三个mongod进程

localhost:27017

localhost:27018

localhost:27019

2️⃣创建并配置三个配置文件来开启三个节点

/user/local/mongodb4.4.1/conf/rs_mongod1.conf

/user/local/mongodb4.4.1/conf/rs_mongod2.conf

/user/local/mongodb4.4.1/conf/rs_mongod3.conf

配置文件内容如下:

三个配置文件中的port端口为对应节点的端口,必须更改成

涉及到路径的配置项path、dbpath里面的路径目录文件都必须创建,带后缀的是文件不带后缀的是目录,别创建错了

replSetName是副本集的名字,一个副本集里的三个节点的三个配置文件里都必须一样。

systemLog: destination: file path: /var/log/mongodb/rs_mongod1.log logAppend: true storage: dbPath: /usr/local/mongodb4.4.1/data/rs_mongod1 journal: enabled: true processManagement: fork: true net: bindIp: localhost port: 27017 replication: oplogSizeMB: 100 replSetName: my_repl enableMajorityReadConcern: true

3️⃣使用配置文件开启节点服务

开启节点服务需要先进入配置文件所在目录,开启服务成功后才能连接节点

#开启节点服务

sudo mongod --config rs_mongod1.conf

#连接节点,进入shell操作界面

#mongo后面的是连接节点的ip和端口

mongo localhost:27017

4️⃣主节点初始化

刚刚创建的三个节点默认都是从节点,从节点在未设置可读之前无法读取数据,故此时show dbs会报错,这就需要初始化主节点,使其中的一个从节点成为主节点。

var rsconf={_id:"my_repl", members:[ {_id:1,host:“localhost:27017"}, {_id:2,host:“localhost:27018"}, {_id:3,host:“localhost:27019"} ] } rs.initiate(rsconf) #初始化Primary rs.status( ) #查看副本集状态

此时,进行初始化操作的节点就会成为主节点。

5️⃣从节点、仲裁节点设置

下面的三个操作都是在主节点的shell里完成的,主节点才有权对其他节点进行设置

#将该节点作为从节点加入集群中 rs.add("localhost:27019") #将节点设置成仲裁节点 rs.addArb("localhost:27019") #从集群中删除节点 rs.remove("localhost:27019")

从节点设置为可读

rs.slaveOK()

对哪个节点的操作就要在哪个节点的shell界面进行设置

💥💥💥副本集操作完成后不能直接关闭终端,必须必须必须使用两次exit先退出shell再退出节点服务最后关闭虚拟机,否则下次再开启节点服务时,会因为直接关闭终端或者虚拟机而导致服务异常关闭,从而无法正常开启服务,处理起来会很麻烦。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3